using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._GeodatabaseAdministration
{
    /// <summary>
    /// <para>Migrate Storage</para>
    /// <para>Moves the data from a binary, spatial, or spatial attribute column of one data type to a new column of a different data type in geodatabases in Oracle and SQL Server. The configuration keyword you specify when migrating determines the data type used for the new column.</para>
    /// <para>在 Oracle 和 SQL Server 的地理数据库中，将数据从一种数据类型的二进制、空间或空间属性列移动到其他数据类型的新列。迁移时指定的配置关键字决定了用于新列的数据类型。</para>
    /// </summary>    
    [DisplayName("Migrate Storage")]
    public class MigrateStorage : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MigrateStorage()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_datasets">
        /// <para>Input Datasets</para>
        /// <para>Datasets to be migrated. The connection you use to access the datasets must be connecting as the dataset owner.</para>
        /// <para>要迁移的数据集。用于访问数据集的连接必须以数据集所有者身份进行连接。</para>
        /// </param>
        /// <param name="_config_keyword">
        /// <para>Configuration Keyword</para>
        /// <para>Configuration keyword containing the appropriate parameter values for the migration. Parameter values are set by the geodatabase administrator. Contact your geodatabase administrator if you are unsure which configuration keyword to use.</para>
        /// <para>包含迁移的相应参数值的配置关键字。参数值由地理数据库管理员设置。如果您不确定要使用哪个配置关键字，请联系地理数据库管理员。</para>
        /// </param>
        public MigrateStorage(List<object> _in_datasets, object _config_keyword)
        {
            this._in_datasets = _in_datasets;
            this._config_keyword = _config_keyword;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Migrate Storage";

        public override string CallName => "management.MigrateStorage";

        public override List<string> AcceptEnvironments => ["configKeyword", "workspace"];

        public override object[] ParameterInfo => [_in_datasets, _config_keyword, _out_datasetss];

        /// <summary>
        /// <para>Input Datasets</para>
        /// <para>Datasets to be migrated. The connection you use to access the datasets must be connecting as the dataset owner.</para>
        /// <para>要迁移的数据集。用于访问数据集的连接必须以数据集所有者身份进行连接。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Datasets")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_datasets { get; set; }


        /// <summary>
        /// <para>Configuration Keyword</para>
        /// <para>Configuration keyword containing the appropriate parameter values for the migration. Parameter values are set by the geodatabase administrator. Contact your geodatabase administrator if you are unsure which configuration keyword to use.</para>
        /// <para>包含迁移的相应参数值的配置关键字。参数值由地理数据库管理员设置。如果您不确定要使用哪个配置关键字，请联系地理数据库管理员。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Configuration Keyword")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _config_keyword { get; set; }


        /// <summary>
        /// <para>Updated Input Datasets</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Datasets")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _out_datasetss { get; set; }


        public MigrateStorage SetEnv(object configKeyword = null, object workspace = null)
        {
            base.SetEnv(configKeyword: configKeyword, workspace: workspace);
            return this;
        }

    }

}